[レポート] Amazon CloudFront、AWS WAF、およびLambda@Edgeを使ってスパマーを排除する #CMY303 #reinvent
本記事は、セッション「CMY303 - Using Amazon CloudFront, AWS WAF, and Lambda@Edge to keep spammers out」のレポートです
セッション概要
In this session, we look at the timeline, analysis, and solution implemented for a sudden attack by spammers. Suddenly, the number of newly registered users in our system spiked. We could see that these new users were likely spammers. It was a more sophisticated attack than earlier, as traffic originated from everywhere; captchas and email verifications were bypassed. We already had some countermeasures in place, including a manual process for approval. We needed a quick and cost-effective solution. By using Amazon CloudFront, AWS WAF, Lambda@Edge, and some smarts, we permanently stopped 99% of the spammers within an hour.
登壇者
Anders Bjoernestad - Senior consultant, Webstep as
内容
とある架空のサイトを題材としてに、このような流れでの説明がされたセッションでした。
- 通常運用中
- 何かが起きた(通常運用から外れて、対策が必要になる)
- CloudFrontで地域制限をしよう
- AWS WAFで攻撃をブロックしよう
- Lambda@Edgeで攻撃をブロックしよう
- 通常運用に戻る
通常運用中
- 現在の運用状況
- 私達の組織とシステム
- 非営利/ボランティア組織
- コンテンツとディスカッションのページがある
- ユーザがコンテンツを追加できる
- ユーザがそのコンテンツにコメントを追加できる
- ユーザ認証のプロセス
- Captchaや質問による自己登録式
- Eメール認証
- 技術のチョイス
- レガシーシステム
- 市販品を利用
- 何年か前にAWSへ移行した
- Amazon S3を利用
- エラーページ、その他静的なページの配置に利用
- Amazon EC2を利用
- 一般的な使い方
- Amazon CloudFront
- エラーをS3(のエラーページ)へリダイレクト
- ほとんどのトラフィックはEC2へ転送される
- キャッシュが有効になっている
- 私達の組織とシステム
何かが起きた(通常運用から外れて、対策が必要になる)
ユーザ登録の急増が発生
- ユーザ登録が1/Dayから1/分へ急増する
- ユーザ名とメールアドレスが「本物」に見えない・・・
- パターン化されたようなユーザ情報がある
- 「評判が悪い」リストに乗っているようなユーザ情報がある
- ユーザ認証ページではオリジンのIPが .ru や .uaという表示になっている
- 質問からCaptchaに切り替わっている上にCapthcaが表示されていない
完全に怪しい。
CloudFrontで地域制限をしよう
- Amazon CloudFrontの地域制限設定をする
- 地域制限をすべてのdistributionに対して適用する
- 今回は .ruや .ua(ロシアとウクライナ)から異常なアクセスが合ったのでその2つをブラックリストに設定
- 地域制限機能について
- Black- or whitelistの選択して設定できる
- ブロックされたユーザには403エラーが返却される
- サードパーティ製の地域IPデータベースがベースに使われている
- 地域制限をすべてのdistributionに対して適用する
- この設定完了時点では50%ほどのアクセスが減りました。しかしまだまだノイジーです。次にAWS WAFの設定を行っていきます
AWS WAFで攻撃をブロックしよう
- AWS WAFで次の設定を行います
- SQLインジェクションやXSS対策
- HTTPフラッド攻撃対策
- IP reputation list等を利用したIP制限を行い、既知の不正IPアドレスからの攻撃を対策
- 悪意を持ったBotへの対策
Lambda@Edgeで攻撃をブロックしよう
さらに、既知の不正IPアドレスレンジのアクセスに対しては、登録画面にアクセスがあった場合に、ダミーのレスポンスを返すようにします
- Lambda@Edgeで次の機能を実装して、register.php(登録画面)のViewer requestにイベントトリガーをセットする
- IPとメアドをチェック
- 不正な宛先であればダミーのレスポンスを返す
- Lambda@Edgeに関する補足説明
- Lambda@EdgeはCloudFrontの機能の一つ
- エッジで実行される
- HTTPリクエストやレスポンス、またそれらのボディを操作する
- Node.jsとPythonがサポートされている
- イベントトリガーを使ってハンドラを用意できる(前述のViewer requestは図のようにエンドユーザからのリクエストに対して起動するものです)
通常運用に戻る
- しばらくすると、アクセス数が戻りました。
- そのため、CloudFrontの地域制限をオフに戻しておきます
- 最終的にこのような構成となりました
所感
今回セッションで紹介があったAWS WAFやLambda@Edgeを使う方法は比較的モダンな方法もあったと思います。
既にこういったAWS WAF等を利用した対応をしている方もいらっしゃると思いますが、攻撃者は手段をアップデートしてまた行動する可能性が低くないので、常によりよい機能がないか、情報のアップデートを続けていくことが必要かと思いました。